草庐IT

c++ - bisonc++ 多态继承

全部标签

inheritance - 处理 Go 中缺乏继承的最佳实践

我正要开始编写一个新的应用程序,我正在考虑用Go编程,但我没有这方面的经验。由于Go不支持继承,我如何忠实地将这样的域翻译成Go,同时仍然符合Go的哲学?:一个人有2条腿和2条胳膊,可以走路。音乐家是一个人,有乐器并且可以演奏,有分区并且可以阅读。但没有人只能是音乐家,因为音乐家拥有并会演奏特定的乐器。fiddle手是拥有fiddle并会拉fiddle的音乐家钢琴家是拥有钢琴并会弹奏钢琴的音乐家。当一个fiddle手/钢琴家走在街上时,每个人都只把他看作一个人。也许我们可以像这样重新构造域以删除任何"is"关系,以便它可以翻译成Go:fiddle手有一个人的部分,一个音乐家的部分,一把

go - 在继承的结构上使用链方法

我是Go的新手。我正在解决一个与此相似的问题,我有一个从Animal结构继承的结构Dog。我想链接方法,这样我就可以得到像“我是动物。汪!”这样的结果。但是当我运行这个程序时,它产生了一个错误dog.Animal.Hello().Barkundefined(type*AnimalhasnofieldormethodBark)typeAnimalstruct{namestringageint}func(animal*Animal)Hello()*Animal{fmt.Println("Iamananimal")returnanimal}typeDogstruct{*Animal}func

go - 如何强制使用子方法中的多态性?

我来自像C++这样的语言,在这种语言中OOP定义明确并且多态性很常用。我是Go的新手,我正在尝试从多态调用子方法,但我不知道什么是正确的模式。我创建了两个结构,如您所见,我定义了2个方法fun1和fun2,在基本结构中我只重写了其中一个,在父结构中我调用了它。如果多态是正确的,这个子方法应该被调用,至少在我的例子中,这没有发生代码如下:packagemainimport("fmt")typeAstruct{}typeBstruct{A}func(a*A)fun1(){fmt.Println("I'minA.fun1()")a.fun2()}func(a*A)fun2(){fmt.Pri

variables - 如何对变量使用多态性

我是Go新手,开始学习多态性。当多个对象需要使用相同的功能时,我知道如何去做。但是我有一个新问题,如果我在不同的对象上有相同的变量,我不知道该怎么办。在下面的示例中,我有两个不同的对象:struct1和struct2。它们都有相同的变量name。我可以跑过它们并检查哪个是哪个并相应地工作(你可以测试它here):packagemainimport("fmt")typestruct1struct{namestring}typestruct2struct{namestring}funcmain(){structMap:=make(map[string]interface{})s1:=str

inheritance - golang中如何设置继承

tl;dr在此示例中,将Store设置为在多个服务之间共享的正确方法是什么:https://github.com/th0th/goblog/blob/2b2d7ac51978de41f392396309424043817a49d7/store/store.go#L29详情您好,我正在尝试通过创建一个简单的MVC-ish博客RESTAPI来理​​解go的工作原理。我计划应用程序包含3个包/层:模型保存数据结构。定义这些结构的数据库访问层的接口(interface)。商店显示实际的数据库连接。实现模型的接口(interface)。所有数据库访问都通过此实现完成。接口(interface)R

带指针的 Go 工厂方法多态性

typeFoointerface{FooMethod()}typeBarFoostruct{}func(f*BarFoo)FooMethod(){}funcNewBarFoo()*Foo{return&BarFoo{}}错误:不能使用“&BarFoo{}”(类型*BarFoo)作为类型*Foo为什么我会收到此类代码的编译错误?多态性是否适用于指针?顺便说一句,这段代码没问题funcNewBarFoo()Foo{return&BarFoo{}} 最佳答案 您只需将函数签名更改为funcNewBarFoo()Foo{return&Bar

inheritance - 组合和多重继承

由于Go使用组合系统而不是(多重)继承,我只是想知道这3个代码片段。Go说他们强制程序员使用组合。A)应该是(几乎)正确的Go代码,B)伪C)伪恕我直言,这三种代码的结果总是相同的,除此之外,B)和C)可以用于更多的东西,而A)迫使你坚持组合?即使您假设B)在类内部没有排序方法,但是-让我们说像A)这样的全局方法并没有真正的区别oOA)代码:interfaceSortLen()Less(i,jint)boolSwap(i,jint)func(qs*Sort)sort()doTheSortingtypeMyDatastruct{varvalueint}func(s*MyData)Len(

oop - 将继承的结构作为基础对象传回

我确定这是一个语法问题,我还没有用Go弄清楚-我遇到的错误--cannotuse*term(typeelastic.AggregationBucketKeyItem)astypeelastic.AggregationsinargumenttoextractBucket产生错误的行是"Value":extractBucket(parts[1:],*term),相关代码,用于上下文//fromhttps://github.com/olivere/elastic/blob/v3.0.22/search_aggs.gotypeAggregationsmap[string]*json.RawMe

arrays - 具有不同类型或对象继承的数组

我正在用golang编写一个xml响应API。按照xmldocumentation中的示例创建赋予它们属性等的xml非常容易。问题是我需要多个同名但顺序不同的标签。AValue1BValue1AValue2通过创建类似的结构typeTag1struct{Valuestring`xml:",chardata"`}typeTag2struct{Valuestring`xml:",chardata"`}typeBlockstruct{XMLNamexml.Name`xml:"block"`Tags1[]Tag1`xml:"tag1"`Tags2[]Tag2`xml:"tag2"`}Iachi

function - 结构嵌入、函数输入、多态性

我有一个父结构:typeBigPolystruct{Value[]*ring.Poly}还有两个子结构:typePlaintextBigPolytypeCiphertextBigPoly我想要有接受明文和密文的函数。我的解决方案是使用以下形式的函数:funcAdd(a*Ciphertext,binterface{})(*Ciphertext)并使用switch-case来决定要做什么,但我发现这很麻烦,如果输入的数量增加,它会导致非常复杂的情况。然而,由于Plaintext和Ciphertext具有完全相同的结构和内部变量,只是名称不同,是否可以创建一个以更简洁的方式同时接受Plain